package middleware

import (
	"encoding/json"
	"fmt"
	"ginBasic/app/common/business"
	"ginBasic/app/common/lib"
	"ginBasic/app/common/model"
	"ginBasic/global"
	"github.com/gin-gonic/gin"
	"strings"
)

func InitAdminAuthMiddleware(c *gin.Context) {
	fmt.Println("InitAdminAuthMiddleware")
	//进行权限判断 没有登录的用户 不能进入后台管理中心
	//1、获取Url访问的地址  /admin/captcha
	//2、获取Session里面保存的用户信息
	//3、判断Session中的用户信息是否存在，如果不存在跳转到登录页面（注意需要判断） 如果存在继续向下执行
	//4、如果Session不存在，判断当前访问的URl是否是login doLogin captcha，如果不是跳转到登录页面，如果是不行任何操作
	//  1、获取Url访问的地址   /admin/captcha?t=0.8706946438889653
	pathname := strings.Split(c.Request.URL.String(), "?")[0]
	userinfo := lib.GetSessionInfo("userinfo", c)
	if userinfo != "" {
		err := json.Unmarshal([]byte(userinfo), &(global.USERINFO))
		if err != nil || global.USERINFO.Username == "" {
			c.Redirect(302, "/admin/login")
		} else {
			//登录成功，权限判断
			if global.USERINFO.IsSuper != 1 { //不是超级管理员进行权限判断
				roleAccessMap := business.Access.GetAccessAndRole(global.USERINFO.RoleId)
				// 2、获取当前访问的url对应的权限id 判断权限id是否在角色对应的权限
				// pathname   /admin/manager
				where := "url = '" + pathname + "'"
				accessList := model.AccessModel.List(where)
				for _, v := range accessList {
					if _, ok := roleAccessMap[v.Id]; !ok {
						c.String(200, "没有权限")
						c.Abort()
					}
				}
			}
		}

	} else { //说明用户没有登录
		if pathname != "/admin/login" && pathname != "/admin/doLogin" && pathname != "/admin/captcha" {
			c.Redirect(302, "/admin/login")
		}
	}
}
